草庐IT

c++ - QML Qt openUrlExternally

全部标签

c# - 在 C# 中编码一个 char**

我正在与采用char**(即指向字符串的指针)的代码进行交互:intDoSomething(Whatever*handle,char**error);基本上,它需要一个状态句柄,如果出现问题,它会返回错误代码和可选的错误消息(内存是在外部分配的,并通过第二个函数释放。那部分我已经弄明白了:)).但是,我不确定如何在C#中处理in。我目前拥有的:[DllImport("mydll.dll",CallingConvention=CallingConvention.Cdecl)]privatestaticunsafeexternintDoSomething(IntPtrhandle,byte

c# - C# 中的 C 位域

我需要将C结构转换为使用位字段的C#。typedefstructfoo{unsignedintbar1:1;unsignedintbar2:2;unsignedintbar3:3;unsignedintbar4:4;unsignedintbar5:5;unsignedintbar6:6;unsignedintbar7:7;...unsignedintbar32:32;}foo;有人知道怎么做吗? 最佳答案 如thisanswer中所述和thisMSDNarticle,您可能正在寻找以下内容而不是BitField[Flags]enum

c# - 来自 C 背景,在 C# 中实现 const 引用数据表/结构的好方法是什么?

我将给出一个我熟悉的使用C实现的简单示例。我认为重点在于如何使用数据,而不是我在示例中使用它所做的事情:)typedefstruct{constchar*description;uint32_tcolour_id;uint32_tquantity;}my_data_t;constmy_data_tref_data[]={{"BrownBear",0x88,10},{"BlueHorse",0x666,42},{"PurpleCat",123456,50},};voidshow_animals(void){my_data_t*ptr;ptr=&ref_data[2];console_wr

c# - 如何通过引用修改该字符串的非托管 C 库来发送字符串?

我是与非托管库交互的新手。我有一个非托管C函数,它通过函数内的引用修改字符串。我在从C#传递字符串并通过C函数修改它时遇到问题。这是C函数:__declspec(dllexport)void__stdcallTest(char*name){*name="Bar";}这是C#DLL导入代码:[DllImport(@"C:/blah/mylibrary.dll")]publicexternstaticstringTest(stringname);这是我用来调用函数的代码:strings="foo";Test(s);//Iwantstobe"Bar"aftertheaboveline我曾尝试

c# - 如何制作从 C# "Thread-safe"调用的 C (P/invoke) 代码

我有一些使用单个全局变量的简单C代码。显然这不是线程安全的,所以当我在C#中使用P/invoke从多个线程调用它时,事情就搞砸了。如何为每个线程单独导入此函数,或使其成为线程安全的?我尝试声明变量__declspec(thread),但这导致程序崩溃。我还尝试制作一个C++/CLI类,但它不允许成员函数是__declspec(naked),我需要(我正在使用内联汇编)。我在编写多线程C++代码方面经验不足,因此可能缺少某些内容。下面是一些示例代码:C#[DllImport("MyDll.dll",CallingConvention=CallingConvention.Cdecl)]pu

c# - 随机整数中最可能的位

我做过这样的实验——用C和C#制作了1000万个随机数。然后统计随机整数中15位中的每一位被设置了多少次。(我选择15位是因为C只支持最大0x7fff的随机整数)。我得到的是:我有两个问题:为什么有3个最可能的位?在C情况下,位8,10,12是最有可能的。和C#位6,8,11最有可能。与C#最可能位相比,C#最可能位也似乎大部分移动了2个位置。为什么是这样?因为C#使用其他RAND_MAX常量还是什么?我的C测试代码:voidaccumulateResults(intrandom,intbitSet[15]){inti;intisBitSet;for(i=0;iC#的测试代码:stat

c# - C DLL 中的 PInvoke char* 在 C# 中处理为字符串。空字符问题

CDLL中的函数如下所示:intmy_Funct(char*input,char*output);我必须从C#应用程序调用它。我通过以下方式执行此操作:...DllImportstuff...publicstaticexternintmy_Funct(stringinput,stringoutput);输入字符串完美地传输到DLL(我有可见的证据)。该函数填写的输出虽然是错误的。我有hexa数据,比如:3F-D9-00-01但不幸的是,两个零之后的所有内容都被截断了,只有前两个字节进入了我的C#应用程序。它发生了,因为(我猜)它被视为空字符并将其作为字符串的结尾。知道如何摆脱它吗?我试

c# - 改进/修复 C 样式 block 注释的正则表达式

我正在(用C#)编写一个简单的解析器来处理一种看起来很像经典C的脚本语言。在我的一个脚本文件中,我用来识别/*block注释*/的正则表达式进入了某种无限循环,占用了100%的CPU多年。我使用的正则表达式是这样的:/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/关于为什么这可能被锁定有什么建议吗?或者,我可以改用什么正则表达式?更多信息:使用面向.NET3.5的C#3.0;我正在使用Regex.Match(string,int)方法在字符串的特定索引处开始匹配;我已经让程序运行了一个多小时,但比赛还没有完成;传递给Regex构造函数的选项是Regex

c# - 如何在 C# Unity 中使用带有二维数组的 C 结构

所以我有一个具有以下结构的CAPItypedefstructmat4f_{floatm[4][4];}mat4f;它作为参数传递给我的一个API函数:voidmyFunction(constmat4fmatrix);我正在使用dll将此函数导出到Unity中的C#:[DllImport("mylib")]privatestaticexternvoidmyFunction(mat4fmatrix);我的问题是,我应该将相应的C#结构设为什么?现在我有以下内容:[StructLayout(LayoutKind.Sequential)]publicstructmat4f{publicfloa

c# - 用 C# "out parameters"嵌入单声道

我正在尝试使用libmono将C#类嵌入到C应用程序中,但文档有点缺乏。我正在尝试调用原型(prototype)为voidMessageToSend(outMessageObjectmessage);的方法我如何表示“输出参数”?它是指向MonoObject的指针吗?谢谢。附言。就libmono而言,'out'和'ref'参数是否相同? 最佳答案 你是对的,它是MonoObject**。out和ref除了C#编译器之外几乎所有东西都是一样的。 关于c#-用C#"outparameters